package com.acceptable.qucun.generic.util.result.error;

import java.util.HashMap;
import java.util.Map;

public enum  UserErrorResult implements BaseErrorResult{
    // 300XXX 用户功能错误代码 首位为3 6位

    // 功能错误笼统描述
    VERIFY_CODE_ERROR("300100", "验证码获取过程中出现错误。"),
    REGISTER_ERROR("300200", "注册过程中出现错误。"),
    LOGIN_ERROR("300300", "登录过程中出现错误。"),
    PASSWORD_RESET_ERROR("300400", "重置密码过程中出现错误。"),
    DROP_ACCOUNT_ERROR("300500", "帐号注销失败。"),

    // 邮箱错误
    EMAIL_BOUND_ERROR("300210", "该邮箱或手机号已经绑定其他账号，请更换邮箱或手机号后重试。"),
    EMAIL_NOT_BOUND_ERROR("300220", "该邮箱尚未注册。"),
    EMAIL_NOT_EQUALS_ERROR("300230", "两次输入的邮箱地址不一致，请检查后重试。"),

    // 帐号错误
    ACCOUNT_NOT_EXIST_ERROR("300230", "该帐号不存在或帐号被注销。"),

    // 密码错误
    PASSWORD_NOT_EQUALS_ERROR("300310", "两次输入的密码不一致，请检查后重试。"),
    PASSWORD_EQUALS_LAST_ERROR("300320", "输入的密码不能同最近一次的密码相同。"),
    PASSWORD_EMAIL_NOT_MATCH("300330", "输入的邮箱与密码不匹配，请更正后重试。"),

    // 头像错误
    HEAD_IMG_FORMAT_ERROR("300340", "头像格式或大小不合规，请修改后重试。"),
    UPDATE_IMG_ERROR("300350", "头像上传失败。"),

    // 邮箱换绑
    CHANGE_EMAIL_EQUALS_ERROR("300360", "两次输入的邮箱不能相同。"),
    CHANGE_EMAIL_ERROR("300370", "邮箱换绑失败");

    private String code;
    private String msg;
    private static Map<String, UserErrorResult> resultMap;

    UserErrorResult(String code, String msg){
        this.code = code;
        this.msg = msg;
    }

    @Override
    public String getMsg() {
        return msg;
    }

    @Override
    public String getCode() {
        return code;
    }

    private static void createMap(){
        if(resultMap == null){
            resultMap = new HashMap<>();

            // 功能错误笼统描述
            {
                resultMap.put(VERIFY_CODE_ERROR.code, VERIFY_CODE_ERROR);
                resultMap.put(REGISTER_ERROR.code, REGISTER_ERROR);
                resultMap.put(LOGIN_ERROR.code, LOGIN_ERROR);
                resultMap.put(PASSWORD_RESET_ERROR.code, PASSWORD_RESET_ERROR);
                resultMap.put(DROP_ACCOUNT_ERROR.code, DROP_ACCOUNT_ERROR);
            }

            // 邮箱错误
            {
                resultMap.put(EMAIL_NOT_BOUND_ERROR.code, EMAIL_NOT_BOUND_ERROR);
                resultMap.put(EMAIL_BOUND_ERROR.code, EMAIL_BOUND_ERROR);
                resultMap.put(EMAIL_NOT_EQUALS_ERROR.code, EMAIL_NOT_EQUALS_ERROR);
            }

            // 帐号错误
            {
                resultMap.put(ACCOUNT_NOT_EXIST_ERROR.code, ACCOUNT_NOT_EXIST_ERROR);
            }
            // 密码错误
            {
                resultMap.put(PASSWORD_NOT_EQUALS_ERROR.code, PASSWORD_NOT_EQUALS_ERROR);
                resultMap.put(PASSWORD_EQUALS_LAST_ERROR.code, PASSWORD_EQUALS_LAST_ERROR);
                resultMap.put(PASSWORD_EMAIL_NOT_MATCH.code, PASSWORD_EMAIL_NOT_MATCH);
            }

            // 头像错误
            {
                resultMap.put(HEAD_IMG_FORMAT_ERROR.code, HEAD_IMG_FORMAT_ERROR);
                resultMap.put(UPDATE_IMG_ERROR.code, UPDATE_IMG_ERROR);
            }

            // 邮箱换绑
            {
                resultMap.put(CHANGE_EMAIL_EQUALS_ERROR.code, CHANGE_EMAIL_EQUALS_ERROR);
                resultMap.put(CHANGE_EMAIL_ERROR.code, CHANGE_EMAIL_ERROR);
            }
        }

    }

    public static UserErrorResult getErrorResultByCode(String errorCode){
        createMap();
        return resultMap.get(errorCode);
    }

    public static Map<String, UserErrorResult> getResultMap(){
        createMap();
        return resultMap;
    }
}
